1. Field of the Invention
This invention relates to computer systems, and more particularly, to efficient methods and mechanisms for upgrading computing system software.
2. Description of the Relevant Art
Computer clusters group computers together in order to improve performance and/or availability over that provided by a single computer. High-availability clusters are implemented primarily to provide high availability for critical business applications and data through system redundancy and failover. For example, a cluster may have redundant nodes, which are then used to provide service when system components fail. Each application provided by a cluster utilizes resources of a cluster such as a memory (perhaps a harddrive), an Internet Protocol (IP) address, a network name, and so forth. These resources may be moved from one server to another during failover without any dependence on a specific server.
Cluster server software is software designed to allow servers to work together as a computer cluster, which may be used to provide increased availability of applications through failover or to provide high-performance computing through parallel calculating power. For high-availability clusters, the cluster server software may constantly monitor the status of servers, networks, and applications to detect failures or performance degradation. Once detected, the software and can respond by automatically restarting a troubled application on designated backup hardware, while maintaining all network or storage connections in the process.
An upgrade of such software may provide challenges. Upgrade installation scripts may be provided within a module on a read-only memory such as a DVD-ROM. These modules contain product package upgrades and configuration file upgrades for the software. Some of these configuration files are customizable and the old versions may have been edited by the customer. In order for the cluster to remain stable after the upgrade, these customized portions of the configuration files need to be reserved On a machine-by-machine basis, a customer may need to obtain administrator access and execute the installation scripts within the update module. The execution of these scripts should overwrite configuration files to reflect the software updates without overwriting the customized portions.
In order to include coding of all the incremental changes required within all the previous installer scripts, the software designers may define a large matrix to track necessary changes. This matrix may be used to define an exact change list for all platforms (e.g. AIX, Linux, HP, Solaris, etc.), all versions (e.g. 4.0, 4.1, 5.0, etc.), and any other possible variables the product depends on. There may be a large amount of paths within the upgrade module to update between versions of the cluster software product. The number of paths may reach the hundreds depending on platforms, devices, and versions of the platforms and devices. In addition, this change list continues to require on-going updates before the release of the new cluster software product.
One solution to the on-going updates is to freeze the current state of updates, complete and deliver the upgrade module that includes the upgrade installer scripts, compose a new configuration file change list dependent on the customer and their system configuration being used, and hard code the changes into the installer scripts. The hard coding may be performed by the software designers and a new DVD-ROM may be delivered to the customer, or the hard coding may be done by the customer upon receiving documentation of the required changes to the installer scripts. However, this process incorporates human error, a large iterative upgrade loop, much communication between the customer and the software design team, test regression problems between incremental updates, and on-going evolving changes to paths that need maintenance during the iterative loop process.
If a change list could be generated automatically and an update of the configuration files could be performed automatically, in general, an upgrade of a cluster software product would be more efficient. The effort and time required by designers and customers would be greatly reduced. Also, if an automatic upgrade was platform and version independent, the required effort is further reduced. Additionally, the number of regression tests may be greatly reduced, which decreases risk.
In view of the above, efficient methods and mechanisms for upgrading computing system software are desired.